package org.lyc.lanqiao;

import java.io.*;
import java.util.*;

public class IGraphWithCycle {
	static int n;
	static int[] in;                                // 记录入度
	static List<Integer>[] firstArc;                // 边
	static Set<Integer> set = new HashSet<>();      // 环路中的点（使用Set提高执行效率）
	static Queue<Integer> queue = new LinkedList<>();        // 队列存放点

	public static void main(String[] args) throws IOException {
		// 使用BufferedReader比使用Scanner执行效率更高
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
		StreamTokenizer tokenizer = new StreamTokenizer(reader);
		tokenizer.nextToken();
		n = (int) tokenizer.nval;
		in = new int[n + 1];
		firstArc = new ArrayList[n + 1];
		for (int i = 1; i <= n; i++) {
			firstArc[i] = new ArrayList<>();
		}
		for (int i = 1; i <= n; i++) {
			tokenizer.nextToken();
			int from = (int) tokenizer.nval;
			tokenizer.nextToken();
			int to = (int) tokenizer.nval;
			firstArc[from].add(to);
			firstArc[to].add(from);
			in[from]++;
			in[to]++;
		}

		//入度为1的节点进入队列, 入度为1表示这个节点是一个孤立的单边节点, 不可能是环的一部分
		for (int i = 1; i <= n; i++) {
			if (in[i] == 1) queue.add(i);
		}
		/*
		删除这个孤立的单边节点, 即将这个单边节点的邻居的入度都减去1
		如果邻居在删掉这个单边节点之后入度也为1, 那么就进入队列, 依次循环, 直到删除掉所有的单边孤立节点.
		遍历结束后所有的非环内节点的入度都为1, 环内节点的入度为2
		这个步骤是按照拓扑排序的顺序, 逐步删除图中的环外节点, 那么剩余的就是环本身了
		 */
		while (!queue.isEmpty()) {
			int poll = queue.poll();
			for (int edge : firstArc[poll]) {
				in[edge]--;
				if (in[edge] == 1) queue.add(edge);
			}
		}

		// 经过上面的遍历后入度仍未2的节点就必然是环内节点了
		for (int i = 1; i <= n; i++) {
			if (in[i] == 2) {
				set.add(i);
			}
		}
		// 对环路中的点排序
		TreeSet<Integer> sortedSet = new TreeSet<>(set);

		StringBuilder sb = new StringBuilder();
		for (int output : sortedSet) {
			sb.append(output).append(" ");
		}
		System.out.print(sb);
		reader.close();
	}
}
